popover: Always make room for the tail on all sides on size request
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 28 Apr 2014 18:34:49 +0000 (20:34 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 28 Apr 2014 20:35:32 +0000 (22:35 +0200)
Now that popovers may snap to any side with enough space, make enough
room on every side when requesting size, so that there's no w/h differences
at the time of setting the child allocation.

https://bugzilla.gnome.org/show_bug.cgi?id=729097

gtk/gtkpopover.c

index 7d927d377a6260f58b7b60a1ac03a46f741dec2f..a173a96aaa8fa002c72df5e81d5359ecb626ec0f 100644 (file)
@@ -970,9 +970,7 @@ gtk_popover_get_preferred_width (GtkWidget *widget,
                                  gint      *natural_width)
 {
   GtkPopover *popover = GTK_POPOVER (widget);
-  GtkPopoverPrivate *priv = popover->priv;
   GtkWidget *child;
-  GtkPositionType pos;
   gint min, nat, extra, minimal_size;
   GtkBorder border, margin;
 
@@ -988,15 +986,7 @@ gtk_popover_get_preferred_width (GtkWidget *widget,
 
   min = MAX (min, minimal_size) + border.left + border.right;
   nat = MAX (nat, minimal_size) + border.left + border.right;
-
-  pos = get_effective_position (popover, priv->preferred_position);
-
-  if (pos == GTK_POS_LEFT)
-    extra = margin.left + MAX (TAIL_HEIGHT, margin.right);
-  else if (pos == GTK_POS_RIGHT)
-    extra = MAX (TAIL_HEIGHT, margin.left) + margin.right;
-  else
-    extra = margin.left + margin.right;
+  extra = MAX (TAIL_HEIGHT, margin.left) + MAX (TAIL_HEIGHT, margin.right);
 
   min += extra;
   nat += extra;
@@ -1017,7 +1007,6 @@ gtk_popover_get_preferred_width_for_height (GtkWidget *widget,
   GtkPopover *popover = GTK_POPOVER (widget);
   GtkPopoverPrivate *priv = popover->priv;
   GtkWidget *child;
-  GtkPositionType pos;
   gint min, nat, extra, minimal_size;
   gint child_height;
   GtkBorder border, margin;
@@ -1040,15 +1029,7 @@ gtk_popover_get_preferred_width_for_height (GtkWidget *widget,
 
   min = MAX (min, minimal_size) + border.left + border.right;
   nat = MAX (nat, minimal_size) + border.left + border.right;
-
-  pos = get_effective_position (popover, priv->preferred_position);
-
-  if (pos == GTK_POS_LEFT)
-    extra = margin.left + MAX (TAIL_HEIGHT, margin.right);
-  else if (pos == GTK_POS_RIGHT)
-    extra = MAX (TAIL_HEIGHT, margin.left) + margin.right;
-  else
-    extra = margin.left + margin.right;
+  extra = MAX (TAIL_HEIGHT, margin.left) + MAX (TAIL_HEIGHT, margin.right);
 
   min += extra;
   nat += extra;
@@ -1066,9 +1047,7 @@ gtk_popover_get_preferred_height (GtkWidget *widget,
                                   gint      *natural_height)
 {
   GtkPopover *popover = GTK_POPOVER (widget);
-  GtkPopoverPrivate *priv = popover->priv;
   GtkWidget *child;
-  GtkPositionType pos;
   gint min, nat, extra, minimal_size;
   GtkBorder border, margin;
 
@@ -1084,15 +1063,7 @@ gtk_popover_get_preferred_height (GtkWidget *widget,
 
   min = MAX (min, minimal_size) + border.top + border.bottom;
   nat = MAX (nat, minimal_size) + border.top + border.bottom;
-
-  pos = get_effective_position (popover, priv->preferred_position);
-
-  if (pos == GTK_POS_TOP)
-    extra = margin.top + MAX (TAIL_HEIGHT, margin.bottom);
-  else if (pos == GTK_POS_BOTTOM)
-    extra = MAX (TAIL_HEIGHT, margin.top) + margin.bottom;
-  else
-    extra = margin.top + margin.bottom;
+  extra = MAX (TAIL_HEIGHT, margin.top) + MAX (TAIL_HEIGHT, margin.bottom);
 
   min += extra;
   nat += extra;
@@ -1113,7 +1084,6 @@ gtk_popover_get_preferred_height_for_width (GtkWidget *widget,
   GtkPopover *popover = GTK_POPOVER (widget);
   GtkPopoverPrivate *priv = popover->priv;
   GtkWidget *child;
-  GtkPositionType pos;
   gint min, nat, extra, minimal_size;
   gint child_width;
   GtkBorder border, margin;
@@ -1135,15 +1105,7 @@ gtk_popover_get_preferred_height_for_width (GtkWidget *widget,
 
   min = MAX (min, minimal_size) + border.top + border.bottom;
   nat = MAX (nat, minimal_size) + border.top + border.bottom;
-
-  pos = get_effective_position (popover, priv->preferred_position);
-
-  if (pos == GTK_POS_TOP)
-    extra = margin.top + MAX (TAIL_HEIGHT, margin.bottom);
-  else if (pos == GTK_POS_BOTTOM)
-    extra = MAX (TAIL_HEIGHT, margin.top) + margin.bottom;
-  else
-    extra = margin.top + margin.bottom;
+  extra = MAX (TAIL_HEIGHT, margin.top) + MAX (TAIL_HEIGHT, margin.bottom);
 
   min += extra;
   nat += extra;